/*
 * Copyright© 2003-2019 浙江汇信科技有限公司, All Rights Reserved.
 */
package com.icinfo.cloud.provider.punish.service;

import com.icinfo.cloud.common.core.page.PageResponse;
import com.icinfo.cloud.provider.common.service.PunishBaseService;
import com.icinfo.cloud.provider.punish.dto.CaseMainTaskQueryDto;
import com.icinfo.cloud.provider.punish.dto.SlightIllegalUnPunishPageRequest;
import com.icinfo.cloud.provider.punish.ucase.casemain.dto.CaseDetailInfoQueryDto;
import com.icinfo.cloud.provider.punish.ucase.casemain.dto.CaseLinkOperateBusiInfoQueryDto;
import com.icinfo.cloud.provider.punish.ucase.casemain.model.CaseMainInfo;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.*;
import com.icinfo.cloud.provider.punish.vo.AssociatedTaskVo;
import com.icinfo.cloud.provider.punish.vo.CaseMainTaskVo;
import com.icinfo.cloud.provider.punish.vo.CaseOfSlightIllegalVo;
import com.icinfo.cloud.provider.punish.vo.CaseStageAppAdditionOperateDocumentVo;
import com.icinfo.framework.common.web.Result;
import com.icinfo.framework.core.service.BaseService;

import java.util.List;

/**
 * 描述: 案件主表-trj case_main_info 对应的Service接口.<br>
 *
 * @author framework generator
 * @date 2022年06月15日
 */
public interface ICaseMainInfoService extends BaseService, PunishBaseService {

    /**
     * 获取任务列表(代办及办结案件)
     *
     * @author: zhengqiang
     * @date: 2022/6/16
     * @param: queryDto
     * @return {@link List< CaseMainTaskVo>}
     **/
    List<CaseMainTaskVo> getCaseMainTaskList(CaseMainTaskQueryDto queryDto);

    /**
     * 查询简易处罚案件详情
     *
     * @param queryDto
     * @return
     */
    Result<CaseDetailSimpleInfoVo> getCaseDetailSimpleInfo(CaseDetailInfoQueryDto queryDto);

    /**
     * 描述：获取简易处罚详情信息
     *
     * @param queryDto {@link CaseDetailInfoQueryDto}
     * @return {@link  CaseDetailSimpleInfoVo}
     * @author xiangyuyu
     * @date 2022/8/16
     * @since 1.3.2
     */
    CaseDetailSimpleInfoVo getSimpleCaseDetailInfo(CaseDetailInfoQueryDto queryDto);

    /**
     * 查询待办数量
     *
     * @param userId
     * @return
     */
    int getCaseMainWaitTaskCount(String userId);

    /**
     * 根据案件阶段获取对应文书
     *
     * @param caseId 用例id
     * @return {@link Result<List<CaseStageDocumentInfoVo>> }
     * @author shishengyao
     * @date 2022/11/22
     */
    Result<List<CaseDocumentCatalogChainInfoVo>> getCaseStageDocumentInfoList(String caseId);

    /**
     * 【V1.9.4】描述： 查询当前办案人员轻微违法不予处罚记录
     *
     * @author: zhengqiang
     * @date: 2022/12/11
     * @param: pageRequest
     * @return {@link List< CaseOfSlightIllegalVo>}
     **/
    List<CaseOfSlightIllegalVo> getSlightIllegalUnPunishCaseList(SlightIllegalUnPunishPageRequest pageRequest);
    /**
     * 返回案件主流程当前环节的操作按钮-详情页底部，包括流程操作、下一步、更多操作
     * @author liyafeng
     * @date 2022/12/13
     * @param caseId
     * @return {@link CaseCurrentLinkOperateVo}
     */
    Result<CaseCurrentLinkOperateVo> doGetCaseCurrentLinkOperate(String caseId);
    /**
     * 【V1.10.0】描述：获取文书按阶段的列表及每个文书的状态及对应的操作
     * @author tianrunjia
     * @date 2022/12/11
     * @param caseId
     */
    Result<List<CaseStageDocumentRelationInfoVo>> getCaseStageDocumentDetailInfos(String caseId);

    /**
     * 【V1.10.0】描述：案件按环节操作所需信息获取
     * @author tianrunjia
     * @date 2022/12/11
     * @param queryDto
     */
    Result<CaseDetailOperateDocInfoVo> getCaseLinkOperateBusiInfo(CaseLinkOperateBusiInfoQueryDto queryDto);

    /**
     * 【V1.11.1】描述：获取当前阶段案件可操作文书信息
     *
     * @param caseId 用例id
     * @param isMobile
     * @return {@link CaseStageOperateDocumentVo }
     * @author shishengyao
     * @date 2023/03/09
     */
    Result<CaseStageOperateDocumentVo> getCaseStageOperateDocument(String caseId, String isMobile);

    /**
     * 查询证据数量
     *
     * @param caseId
     * @return
     */
    Result<Integer> getEvideceCountForCase(String caseId);

    /**
     * 证据列表
     *
     * @param caseId
     * @return
     */
    Result getEvideceInfo(String caseId);

    /**
     * 【V1.8】描述：移动端获取当前阶段附加的可操作文书信息
     *
     * @param caseId 案件id
     * @return 移动端当前阶段可操作的附加文书（非工作流中的文书）
     * @auth Junfeng.Chen
     * @date 2023/12/15
     */
    List<CaseStageAppAdditionOperateDocumentVo> getCaseStageAppAdditionOperateDocument(String caseId);


    /**
     * 获取我的案件-调查取证阶段
     * @param caseCurrentStageCode 案件阶段
     * @param caseType 案件类型
     * @param partyNameOrCaseReason 当事人名称或任务名称
     * @param page 页码
     * @param size 容量
     * @return
     */
    PageResponse<AssociatedTaskVo> getMyCaseMainTaskList( String caseCurrentStageCode, String caseType, String partyNameOrCaseReason, int page, int size);


    /**
     * 通过案件id获取案件主表信息
     * @return
     */
    CaseMainInfo getCaseMainInfoById(String id);
}
